<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="utf-8" lang="utf-8">
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>
   视图 - CodeIgniter 中文手册|用户手册|用户指南|Wiki文档
  </title>
  <link rel="shortcut icon" href="/user_guide/../images/design/favicon.ico" type="image/x-icon" />
  <link rel="stylesheet" type="text/css" media="all" href="/user_guide/userguide.css" />
  <link rel="search" href="/user_guide/../CodeIgniterSearch.xml" type="application/opensearchdescription+xml" title="CodeIgniter 搜索" />
  <link rel="canonical" href="/user_guide/general/views.html" />
  <script type="text/javascript" src="/user_guide/nav/nav.js">
  </script>
  <script type="text/javascript" src="/user_guide/nav/prototype.lite.js">
  </script>
  <script type="text/javascript" src="/user_guide/nav/moo.fx.js">
  </script>
  <script type="text/javascript" src="/user_guide/nav/user_guide_menu.js">
  </script>
  <meta name="robots" content="all" />
  <meta name="author" content="ExpressionEngine Dev Team" />
  <meta name="description" content="CodeIgniter 中文手册, CodeIgniter 用户指南, CodeIgniter User Guide, Wiki 文档" />
 </head>
 <body>
  <!-- START NAVIGATION -->
  <div id="nav">
   <div id="nav_inner">
    <script type="text/javascript">
     create_menu('/user_guide/');
    </script>
   </div>
  </div>
  <script type="text/javascript">
   _setNavigation();
  </script>
  <div id="nav2">
   <a name="top">
   </a>
   <a href="javascript:void(0);" onclick="myHeight.toggle();">
    <img src="/user_guide/images/nav_toggle_darker.jpg" width="154" height="43" border="0" title="切换目录" alt="切换目录" />
   </a>
  </div>
  <div id="masthead">
   <table cellpadding="0" cellspacing="0" border="0" style="width:100%">
    <tr>
     <td width="350">
      <h1>
       CodeIgniter 用户指南 版本 2.0.0
      </h1>
     </td>
     
     <td id="breadcrumb_right">
      <a href="/user_guide/toc.html">
       目录页
      </a>
     </td>
    </tr>
   </table>
  </div>
  <!-- END NAVIGATION -->
  <!-- START BREADCRUMB -->
  <table cellpadding="0" cellspacing="0" border="0" style="width:100%">
   <tr>
    <td id="breadcrumb">
     <a href="/" target="_blank">
      CodeIgniter 中国首页
     </a>
     &nbsp;&#8250;&nbsp;
     <a href="/user_guide/toc.html">用户指南目录</a>
     &nbsp;&#8250;&nbsp;视图
    </td>
    <td id="searchbox">
     <form method="get" action="http://www.google.com/search" target="google_window">
      <input type="hidden" name="client" value="pub-0176846097796333" />
      <input type="hidden" name="forid" value="1" />
      <input type="hidden" name="ie" value="UTF-8" />
      <input type="hidden" name="oe" value="UTF-8" />
      <input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter.org.cn/user_guide/" />
      搜索用户指南&nbsp;
      <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />
      &nbsp;
      <input type="submit" class="submit" name="sa" value="Go" />
     </form>
    </td>
   </tr>
  </table>
  <!-- END BREADCRUMB -->
  <div style="clear:both;text-align:right;padding: 6px 40px 0 0;">
   <a href="http://codeigniter.com/user_guide/general/views.html" target="_blank">
    查看原文
   </a>
  </div>
  <!--<br clear="all"  />-->
  <!-- START CONTENT -->
  <div id="content">
   <h1>
    视图
   </h1>
   <p>
    简而言之，一个
    <dfn>
     视图
    </dfn>
    就是一个网页，或是网页的部分，如头部，底部，侧边栏等等。事实上，如果你需要这种层次类型，视图可以很灵活的嵌入到其他视图中。
   </p>
   <p>
    视图从不直接调用，必须被一个
    <a href="controllers.html">
     控制器
    </a>
    来调用。记住，在一个 MVC 框架中，控制器扮演着交通警察的角色，那么，他有责任去取回某一特定的视图。如果你还没有阅读过控制器页面的话，你应该事先阅读
    <a href="controllers.html">
     控制器
    </a>
    页面。
   </p>
   <p>
    下面使用你在
    <a href="controllers.html">
     控制器
    </a>
    页面已经创建过的示例控制器,让我们来给他添加个视图。
   </p>
   <h2>
    创建视图
   </h2>
   <p>
    使用你的文本编辑器，创建一个名为
    <dfn>
     blogview.php
    </dfn>
    的文件，写入以下代码：
   </p>
   <p>
    <textarea cols="50" rows="10" style="width: 100%;" class="textarea">
     &lt;html&gt;
&lt;head&gt;
&lt;title&gt;My Blog&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
 <h1>Welcome to my Blog!</h1>
&lt;/body&gt;
&lt;/html&gt;
    </textarea>
   </p>
   <p>
    然后保存文件到
    <dfn>
     application/views/
    </dfn>
    文件夹。
   </p>
   <h2>
    载入视图
   </h2>
   <p>
    你必须使用下面的函数来载入一个视图文件:
   </p>
   <p>
    <code>
     $this-&gt;load-&gt;view('
     <var>
      name
     </var>
     ');
    </code>
   </p>
   <p>
    上面的
    <var>
     name
    </var>
    便是你的视图文件的名字。注意：.php 文件的扩展名(后缀名)没有必要专门写出，除非你使用了其他的扩展名。
   </p>
   <p>
    现在, 打开你先前写的名为
    <dfn>
     blog.php
    </dfn>
    控制器文件,并且使用视图载入函数替换echo段代码:
   </p>
   <p>
    <textarea cols="50" rows="10" style="width: 100%;" class="textarea">
     &lt;?php
class Blog extends CI_Controller &#123;

 function index()
 &#123;
  $this-&gt;load-&gt;view('blogview');
 &#125;
&#125;
?&gt;
    </textarea>
   </p>
   <p>
    如果你使用先前你用的 URL 浏览你的网站,你将会看到你的新视图. URL 与下面的类似:
   </p>
   <code>
    example.com/index.php/
    <var>
     blog
    </var>
    /
   </code>
   <h2>
    载入多个视图
   </h2>
   <p>
    CodeIgniter 能智能的处理多个从控制器发起的视图载入函数调用 $this-&gt;load-&gt;view。如果有多个调用，那么他们将会被合并到一起。例如，你可能希望有一个标题视图、一个菜单视图、一个内容视图、和一个页脚视图。他们看起来应该是这样：
   </p>
   <p>
    <code>
     &lt;?php
     <br />
     <br />
     class Page extends CI_Controller &#123;
     <br />
     <br />
     &nbsp;&nbsp;&nbsp;function index()
     <br />
     &nbsp;&nbsp;&nbsp;&#123;
     <br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$data['page_title'] =  'Your title';
     <br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;load-&gt;view('header');
     <br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;load-&gt;view('menu');
     <br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;load-&gt;view('content', $data);
     <br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;load-&gt;view('footer');
     <br />
     &nbsp;&nbsp;&nbsp;&#125;
     <br />
     <br />
     &#125;
     <br />
     ?&gt;
    </code>
   </p>
   <p>
    在上面的例子中，我们使用了“动态添加数据”，你将在下面看到。
   </p>
   <h2>
    用子文件夹存储视图
   </h2>
   <p>
    如果你想让文件更有组织性,你也可以用子文件夹来存储你的视图文件.. 当你在载入视图时,必须加上子文件夹的名字. 示例如下:
   </p>
   <p>
    <code>
     $this-&gt;load-&gt;view('
     <kbd>
      folder_name
     </kbd>
     /
     <var>
      file_name
     </var>
     ');
    </code>
   </p>
   <h2>
    给视图添加动态数据
   </h2>
   <p>
    数据通过控制器以一个
    <strong>
     数组
    </strong>
    或是
    <strong>
     对象
    </strong>
    的形式传入视图 , 这个数组或对象作为视图载入函数的第二个参数 .下面便是使用数组的示例:
   </p>
   <p>
    <code>
     $data = array(
     <br />
     'title' => 'My Title',
     <br />
     'heading' => 'My Heading',
     <br />
     'message' => 'My Message'
     <br />
     );
     <br />
     <br />
     $this-&gt;load-&gt;view('blogview',
     <var>
      $data
     </var>
     );
    </code>
   </p>
   <p>
    这里是使用对象的示例:
   </p>
   <p>
    <code>
     $data = new Someclass();
     <br />
     $this-&gt;load-&gt;view('blogview',
     <var>
      $data
     </var>
     );
    </code>
   </p>
   <p>
    当我们一次性载入多个视图的时候，你只需在第一个视图传入数据就可以了(header视图显示title,content视图显示message)，比如：
   </p>
   <p>
    <code>
     <br />
     &lt;?php
     <br />
     <br />
     class Page extends CI_Controller &#123;
     <br />
     <br />
     &nbsp;&nbsp;&nbsp;function index()
     <br />
     &nbsp;&nbsp;&nbsp;&#123;
     <br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$data['title'] =  'Your title';
     <br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$data['message'] =  'Your message';
     <br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;load-&gt;view('header',$data);
     <br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;load-&gt;view('content');
     <br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;load-&gt;view('footer');
     <br />
     &nbsp;&nbsp;&nbsp;&#125;
     <br />
     <br />
     &#125;
     <br />
     ?&gt;
    </code>
   </p>
   <p>
    注意：如果你使用一个对象，那么类变量将转换为数组元素。
   </p>
   <p>
    好了，让我们用你的控制器试试。打开控制器并添加以下代码：
   </p>
   <p>
    <textarea cols="50" rows="14" style="width: 100%;" class="textarea">
     &lt;?php
class Blog extends CI_Controller &#123;

 function index()
 &#123;
  $data['title'] = "My Real Title";
  $data['heading'] = "My Real Heading";
  
  $this-&gt;load-&gt;view('blogview', $data);
 &#125;
&#125;
?&gt;
    </textarea>
   </p>
   <p>
    现在，打开你的视图文件，将其中的文本替换成与数组对应的变量：
   </p>
   <p>
    <textarea rows="10" cols="50" style="width: 100%;" class="textarea">
     &lt;html&gt;
&lt;head&gt;
&lt;title&gt;&lt;?php echo $title;?&gt;&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
 <h1>&lt;?php echo $heading;?&gt;</h1>
&lt;/body&gt;
&lt;/html&gt;
    </textarea>
   </p>
   <p>
    然后使用你先前用过的URL载入页面，你将看到变量已经被替换。
   </p>
   <h2>
    创建循环
   </h2>
   <p>
    你传入视图文件的数据，不仅仅局限于简单的变量。你可以传递多维数组。例如：你从数据库里面取出数据就是典型的多维数据。
   </p>
   <p>
    这里是个简单的示例。添加以下代码到你的控制器：
   </p>
   <p>
    <textarea cols="50" rows="17" style="width: 100%;" class="textarea">
     &lt;?php
class Blog extends CI_Controller &#123;

 function index()
 &#123;
  $data['todo_list'] = array('Clean House', 'Call Mom', 'Run Errands');

  $data['title'] = "My Real Title";
  $data['heading'] = "My Real Heading";
  
  $this-&gt;load-&gt;view('blogview', $data);
 &#125;
&#125;
?&gt;
    </textarea>
   </p>
   <p>
    现在打开你的视图文件，创建一个循环：
   </p>
   <textarea class="textarea" style="width:100%" cols="50" rows="24">
    &lt;html&gt;
&lt;head&gt;
&lt;title>&lt;?php echo $title;?&gt;&lt;/title>
&lt;/head&gt;
&lt;body&gt;
&lt;h1>&lt;?php echo $heading;?&gt;&lt;/h1>
 
<h3>My Todo List</h3> 

<ul>
&lt;?php foreach($todo_list as $item):?&gt;

&lt;li>&lt;?php echo $item;?&gt;&lt;/li>

&lt;?php endforeach;?&gt;
</ul>
 
&lt;/body&gt;
&lt;/html&gt;
   </textarea>
   <p>
    <strong>
     注意:
    </strong>
    上面的例子中我们使用PHP替代语法。如果你对这种语法不熟悉，可以在
    <a href="alternative_php.html">
     这里
    </a>
    阅读。
   </p>
   <h2>
    获取视图内容
   </h2>
   <p>
    view函数第三个
    <strong>
     可选
    </strong>
    参数可以改变函数的行为，让数据作为字符串返回而不是发送到浏览器。如果想用其它方式对数据进一步处理，这样做很有用。如果将view第三个参数设置为
    <dbd>
     true
    </dbd>
    （布尔）则函数返回数据。view函数缺省行为是
    <dbd>
     false
    </dbd>
    ,　将数据发送到浏览器。如果想返回数据，记得将它赋到一个变量中：
   </p>
   <code>
    $string = $this-&gt;load-&gt;view('
    <var>
     myfile
    </var>
    ', '',
    <kbd>
     true
    </kbd>
    );
   </code>
   <p>
    例子：有些情况下，你并不想直接输出视图，而是仅仅想得到视图的内容以备后用。那么可以参考如下代码。
   </p>
   <p>
    <textarea cols="50" rows="13" style="width: 100%;" class="textarea">
     &lt;?php
class Blog extends CI_Controller &#123;

 function index()
 &#123;
  $data['todo_list'] = array('Clean House', 'Call Mom', 'Run Errands');

  $data['title'] = "My Real Title";
  $data['heading'] = "My Real Heading";
  
  $buffer = $this-&gt;load-&gt;view('blogview', $data, true);
 &#125;
&#125;
?&gt;
    </textarea>
   </p>
   <p>
    view方法中的第三个参数表示不输出视图，而只是将结果返回给一个变量。
   </p>
   <p>
    &nbsp;
   </p>
   <div id="Contributors">
    翻译贡献者:
34333432, hewenxiang, Hex, ianyang, irini, lishen2, longjianghu, sydcurie, thankwsx, zhupeng
   </div>
   <div id="DocDate">
    最后修改: 2011-05-09 21:24:51
   </div>
  </div>
  <!-- END CONTENT -->
  <div id="footer">
   <p>
    上一个主题:&nbsp;&nbsp;
    <a href="/user_guide/general/reserved_names.html">
     保留字
    </a>
    &nbsp;&nbsp;&middot;&nbsp;&nbsp;
    <a href="#top">
     页首
    </a>
    &nbsp;&middot;&nbsp;&nbsp;
    <a href="/user_guide/toc.html">用户指南目录</a>
    &nbsp;&nbsp;&middot;&nbsp;&nbsp;下一个主题:&nbsp;&nbsp;
    <a href="/user_guide/general/models.html">
     模型
    </a>
   </p>
   <p>
    <a href="http://codeigniter.com">
     CodeIgniter
    </a>
    &nbsp;&middot;&nbsp; 版权所有 &#169; 2006-2011 &nbsp;&middot;&nbsp;
    <a href="http://ellislab.com/">
     Ellislab, Inc.
    </a>
   </p>
   <p>
    中文化:
    <a href="">
     CodeIgniter 中国
    </a>
    &nbsp;&middot;&nbsp; 制作: Hex &nbsp;&middot;&nbsp; 版本: 1.20 &nbsp;&middot;&nbsp; 鸣谢: 子非鱼
   </p>
  </div>
  
  <div style="display:none">
   
   <noscript>
    <a href="http://www.51.la/?3289908" target="_blank">
     <img alt="我要啦免费统计" src="http://img.users.51.la/3289908.asp" style="border:none" />
    </a>
   </noscript>
  </div>
 </body>
</html>